﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FastPoster.MainForms
{
    #region using
    using DevComponents.DotNetBar;
    using FastPoster.DataProviders.BUS;
    using FastPoster.DataProviders.DTO;
    using FastPoster.Helpers;
    using System.IO;
    using FastPoster.MainClasses;
    #endregion

    public partial class FrmDangTin : Office2007Form
    {
        private bool        bnLoading;
        public EventHandler Handler { get; set; }

        public FrmDangTin()
        {
            InitializeComponent();
        }

        public bool ValidateInput(ref string errText)
        {
            if (cbxTieuDe.Text.Trim() == string.Empty)
            {
                errText = "Vui lòng nhập tiêu đề";
                return false;
            }

            if (bbcCtrlNoiDung.getText() == string.Empty)
            {
                errText = "Vui lòng nhập nội dung";
                return false;
            }
            return true;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            var errText = "";
            if (cbxTieuDe.SelectedIndex != -1)
            {
                MessageBoxEx.Show("Hiện thời đang chọn 1 bài viết nên không thể thêm mới được", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!ValidateInput(ref errText))
            {
                MessageBoxEx.Show(errText, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            var objBus = new BaiVietMauBUS(GlobalVariables.g_strPath);
            var objDto = new BaiVietMauDTO
            {
                TieuDe = cbxTieuDe.Text.Trim(),
                NoiDung = bbcCtrlNoiDung.getText()
            };
            if (objBus.Insert(objDto))
            {
                LoadBaiVietMaus();
                MessageBoxEx.Show("Thêm dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (cbxTieuDe.SelectedIndex == -1)
            {
                MessageBoxEx.Show("Vui lòng chọn bài viết", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (MessageBoxEx.Show("Bạn có chắc chắn xóa bài viết này không?", "Xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                var objBus = new BaiVietMauBUS(GlobalVariables.g_strPath);
                if (objBus.Delete(int.Parse(cbxTieuDe.SelectedValue.ToString())))
                {
                    LoadBaiVietMaus();
                    ResetBaiVietMau();
                    MessageBoxEx.Show("Xóa dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            var errText = "";
            if (cbxTieuDe.SelectedIndex == -1)
            {
                MessageBoxEx.Show("Vui lòng chọn bài viết", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!ValidateInput(ref errText))
            {
                MessageBoxEx.Show(errText, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            var objBus = new BaiVietMauBUS(GlobalVariables.g_strPath);
            var objDto = new BaiVietMauDTO
            {
                ID = int.Parse(cbxTieuDe.SelectedValue.ToString()),
                TieuDe = cbxTieuDe.Text.Trim(),
                NoiDung = bbcCtrlNoiDung.getText()
            };
            if (objBus.Update(objDto))
            {
                MessageBoxEx.Show("Cập nhật dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        public void ResetBaiVietMau()
        {
            cbxTieuDe.SelectedIndex = -1;
            bbcCtrlNoiDung.setText(string.Empty);
        }

        private void btnNhapMoi_Click(object sender, EventArgs e)
        {
            ResetBaiVietMau();
        }

        public void LoadBaiVietMaus()
        {
            var objBus = new BaiVietMauBUS(GlobalVariables.g_strPath);
            var ds = objBus.SelectAll();
            cbxTieuDe.DataSource = ds.Tables[0];
            cbxTieuDe.DisplayMember = "TieuDe";
            cbxTieuDe.ValueMember = "ID";
            cbxTieuDe.SelectedIndex = -1;
        }

        public void LoadDanhMucs()
        {
            var objBus = new DanhMucBUS(GlobalVariables.g_strPath);
            var ds = objBus.SelectAll();
            cbxDanhMuc.DataSource = ds.Tables[0];
            cbxDanhMuc.DisplayMember = "TenDanhMuc";
            cbxDanhMuc.ValueMember = "ID";
            cbxDanhMuc.SelectedIndex = -1;
        }

        private void FrmDangTin_Load(object sender, EventArgs e)
        {
            GlobalVariables.PreLoading();
            bnLoading = true;

            LoadBaiVietMaus();
            LoadDanhMucs();

            bnLoading = false;
            GlobalVariables.PosLoading();
        }

        private void cbxTieuDe_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (bnLoading)
            {
                return;
            }

            if (cbxTieuDe.SelectedIndex != -1)
            {
                var objBus = new BaiVietMauBUS(GlobalVariables.g_strPath);
                var ds = objBus.SelectByID(int.Parse(cbxTieuDe.SelectedValue.ToString()));
                if (ds.Tables[0].Rows.Count > 0)
                {
                    bbcCtrlNoiDung.setText(ds.Tables[0].Rows[0]["NoiDung"].ToString());
                }
            }
        }   

        private void btnDangTin_Click(object sender, EventArgs e)
        {
            var errText = "";

            if (cbxDanhMuc.SelectedIndex == -1)
            {
                MessageBoxEx.Show("Vui lòng chọn danh mục", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (cbxTieuDe.SelectedIndex == -1)
            {
                if (!ValidateInput(ref errText))
                {
                    MessageBoxEx.Show(errText, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                // Them bai viet moi
                var objBus = new BaiVietMauBUS(GlobalVariables.g_strPath);
                var objDto = new BaiVietMauDTO
                {
                    TieuDe = cbxTieuDe.Text.Trim(),
                    NoiDung = bbcCtrlNoiDung.getText()
                };
                if (objBus.Insert(objDto))
                {
                    // Reload danh sach bai viet mau
                    LoadBaiVietMaus();
                    objBus = new BaiVietMauBUS(GlobalVariables.g_strPath);
                    var maxID = int.Parse(objBus.RetrieveMaxID().Tables[0].Rows[0][0].ToString());
                    cbxTieuDe.SelectedValue = maxID;
                }
            }

            var lst = GlobalVariables.RetrieveBoxList(int.Parse(cbxDanhMuc.SelectedValue.ToString()));

            if (lst.Count > 0)
            {
                // Load danh sach cac bai viet da dang de thuc hien generate back link
                var objBus = new BaiVietDaDangBUS(GlobalVariables.g_strPath);
                var ds = objBus.SelectByIDBaiVietMau(int.Parse(cbxTieuDe.SelectedValue.ToString()));
                if (ds.Tables[0].Rows.Count > 0)
                {
                    GlobalVariables.LstCacBaiVietDaDang.Clear();
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        GlobalVariables.LstCacBaiVietDaDang.Add(row["URL"].ToString());
                    }
                }
                GlobalVariables.Logger.Info("Start posting progress");
                TransferDataInfo(this, new TransferBoxListEvent(lst, int.Parse(cbxTieuDe.SelectedValue.ToString()), cbxTieuDe.Text.Trim(), bbcCtrlNoiDung.getText()));
            }
            else
            {
                MessageBoxEx.Show("Danh mục này không có bất cứ box link nào", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void TransferDataInfo(object sender, TransferBoxListEvent e)
        {
            this.Handler(this, e);
        }

        public void EnableBtnDangTin(bool val)
        {
            btnDangTin.Enabled = val;
        }
    }
}
